The hosting panel, the CMS, the form service, the DNS host and the staging server a studio used to juggle, as one Blutui project.
shipped
Open featureWeka
weka.co.nz
One project · one login · one invoice
Build on a development cassette, send the client a preview to review, and make it live when they sign off.
shipped
Open feature01 · DevelopmentYour studio
02 · ReviewThe client
03 · ProductionEveryone
$ courier push
✓ 14 files synced
Spring range
Shop nowPīwakawaka Fantailnow
Re: Spring range preview
Love it. Ship it!
Spring range
Shop nowEvery client project in one console: live and in development side by side, one login for the whole team.
shipped
Open featureProjects (7)
Northwind Studio
northwind.blutui.com
Ada & Partners
ada_partners.blutui.com
Golden Hour
golden_hour.blutui.com
Burgertorium
burgertorium.blutui.com
Frequencies Records
frequencies.blutui.com
Hollis Dental
hollis_dental.blutui.com
Field & Fern
fieldandfern.blutui.com
Projects (8)(7)
Lumen Bakery
lumen_bakery.blutui.com
Northwind Studio
northwind.blutui.com
Ada & Partners
ada_partners.blutui.com
Golden Hour
golden_hour.blutui.com
Burgertorium
burgertorium.blutui.com
Back
Create a new project
Let's light this candle and get creative.
Projects
(24)
weka.blutui.com
Created 4 Sep 2026
pukeko.blutui.com
Created 28 Aug 2026
kea.blutui.com
Created 11 Aug 2026
kokako.blutui.com
Created 30 Jul 2026
ruru.blutui.com
Created 19 Jun 2026
kaka.blutui.com
Created 12 Jun 2026
tieke.blutui.com
Created 3 Jun 2026
toroa.blutui.com
Created 21 May 2026
The whole studio on one agency: invite members, give each a role and an access level, and manage seats as the team grows.
shipped
Open featureTeam
Manage your team members and invitations.
12
Current members
8
Remaining seats
43
hihi@kotuku.studio
kakariki@kotuku.studio
kotare@kotuku.studio
tauhou@kotuku.studio
karearea@kotuku.studio
riroriro@kotuku.studio
Push local files to the platform from the terminal and watch them land on the live project.
shipped
Open feature$ courier push
Bundling views/ and public/…
↑ views/canopy/hero.canvas
↑ public/styles/global.css
Uploading cassette…
✓ Deployed to production in 4.2s▏
Local · views/
Blutui · project
Northwind Studio
northwind.blutui.com
Live
~/dev/takahe ❯ courier push
Bundling views/ and public/…
↑views/layouts/default.html2.4 KB
↑views/canopy/hero.canvas1.1 KB
↑public/styles/global.css18.7 KB
↑public/scripts/app.js9.3 KB
Uploading cassette ██████████ 18% 76% 100%
✓ Deployed to production in 4.2s
https://takahe.blutui.site
~/dev/takahe ❯
~/dev/takahe ❯ courier dev
Watching views/ and src/…
https://localhost:8080
…/Dev/blutui
→ blutui courier create
██████╗ ██████╗ ██╗ ██╗██████╗ ██╗███████╗██████╗ ██╔════╝██╔═══██╗██║ ██║██╔══██╗██║██╔════╝██╔══██╗ ██║ ██║ ██║██║ ██║██████╔╝██║█████╗ ██████╔╝ ██║ ██║ ██║██║ ██║██╔══██╗██║██╔══╝ ██╔══██╗ ╚██████╗╚██████╔╝╚██████╔╝██║ ██║██║███████╗██║ ██║ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═╝
? What is your project handle? › my-projecttakahe
Every project keeps versions of itself: build a redesign or a seasonal campaign on its own cassette and make it live when it is ready.
shipped
Open featureCassettes
(3)(4)
christmas
Created 11 Sep 2026
newstore
Created 28 Aug 2026
halloween
Created 21 Jul 2026
default
Created 15 Jul 2026
Roles the agency defines, each with its own permissions, so every teammate and freelancer sees only what they should.
shipped
Open featureSettings
Roles
Manage roles and permissions for your team.
Edit pages, collections and forms
0 users
No description
6 users
No description
2 users
No description
0 users
No description
0 users
Team · Kōtuku
DeveloperFreelancerOwnerAdmin
8 of 17 permissions4 of 17 permissionsAll 17 permissions16 of 17 permissions
Projects
Domains
Teams
Settings
Subscription & billing
The studio's own logo and colours on the console, so clients log in to the agency's brand rather than Blutui's.
shipped
Open featureBrand settings
Drop your brand and colour palette in to see what your agency eco-system will look like.
Primary colour
Used for buttons, links and other elements.
Secondary colour
Used for secondary page elements.
Every client domain in one place: add it, point it at a project and watch it connect, with a certificate.
shipped
Open featureDomains
(29)(30)
Added 11 Sep 2026
Project
KākāpōStatus
Pending ConnectedAdded 4 Sep 2026
Project
WekaStatus
ConnectedAdded 28 Aug 2026
Project
PūkekoStatus
ConnectedAdded 12 Jun 2026
Project
KākāStatus
ConnectedAdded 3 Jun 2026
Project
TīekeStatus
ConnectedAdded 21 May 2026
Project
ToroaStatus
ConnectedEvery project is hosted by Blutui: publish from the console and it is live on the client's own domain, with a certificate.
shipped
Open featureHollis Dental
hollisdental.co.nzhollis_dental.blutui.com
Overview
weka.blutui.com weka.co.nz
Domain
weka.co.nz
ConnectedActive cassette
default
Last published
Never Just now
Blutui Context: a Courier MCP server and agent skills that teach any AI assistant to build Blutui projects properly.
shipped
Open featureAdd a team page backed by a collection.
Any assistant
<form action="/api/contact">
<input name="email">
<input name="message">
<button>Send</button>
</form>
Posts to nowhere · no spam scan
With Blutui Context
{% form 'contact' %}
{% for field in form.fields %}
{{ ui.field(field) }}
{% endfor %}
{% endform %}
Submissions in the console · AI scan on
{% extends 'templates/default.html' %}
{% set team = cms.collection('team') %}
{% block body %}
<section class="mx-auto max-w-5xl px-6 py-20">
<h1>The team</h1>
<div class="mt-12 grid gap-10 @3xl:grid-cols-3">
{% for person in team %}
<article>
<p>{{ person.name }}</p>
<p>{{ person.role }}</p>
</article>
{% endfor %}
</div>
</section>
{% endblock %}
Add a team page backed by a collection.
create_collection
handle: "team"
fields: name, role, photo, email
The page renders the collection with a Canvas loop, the way the Blutui rules ask for it.
Prototype a spring landing page for Weka, with products and an enquiry form.
Working with Blutui Context…
Prototype ready at localhost:8080/spring
Ask anything…
Any AI assistant
Blutui Context
Skills
MCP
Spring range
Shop nowNew this season
Ask us anything
Take an agent's prototype into Figma or Paper to refine it, then bring the design back into the project as Canvas templates and Canopy blocks through MCP.
exploring
Open featureVia MCP
HTML to
frames
The prototype
Into Figma or Paper
Spring range
Shop nowNew this season
Ask us anything
Spring landing
Nav
Hero
Products
Enquiry
Frame
Fill
FFFFFF
Auto layout
Gap 24
Spring landing
Spring range
Shop nowNew this season
Ask us anything
From Figma or Paper
Into Blutui Canvas
Spring landing
Spring range
Shop nowNew this season
Ask us anything
Figma or Paperreads
Blutuiwrites
blutui-canopy-blocks
views
layouts
landing.htmlA
canopy
hero.canvasA
products.canvasA
enquiry.canvasA
{% canopy config %} { "title": "Hero", "name": "hero", "settings": [ { "name": "heading", "type": "text" }, { "name": "image", "type": "file" } ] } {% endcanopy %} {% canopy template %} {% set image = settings.image %} <section class="hero"> <h1>{{ settings.heading }}</h1> <img src="{{ image.path }}"> </section> {% endcanopy %}
The templating language behind every Blutui page: loops, variables, filters and template inheritance in plain HTML.
shipped
Open feature{% for member in team %}
<article>
<h3>{{ member.name }}</h3>
<p>{{ member.role }}</p>
</article>
{% endfor %}▏
Rendered · /team
{% extends 'templates/default' %}
{% block body %}
<section class="hero">
<h1>Book a visit</h1>
</section>
{% endblock %}
Book a visit
See times{% extends 'templates/default.html' %}
{% set plans = cms.collection('plans')
| sort_by('order') | slice(0, 3) %}
{% block body %}
{{ include('components/hero.html') }}
{% for plan in plans %}
<article class="plan">
<h3>{{ plan.name }}</h3>
<p>{{ plan.beds }} bed · {{ plan.baths }} bath</p>
</article>
{% endfor %}
{% endblock %}
Clients edit the page in place. Settings live beside the canvas and the design holds whatever they change.
shipped
Open featureEverything your studio ships withneeds
Start creatingHero · Settings
Heading
Button
Blocks
Feature
Everything your studio needs, on one platform.
Sections
Home
Recipes
Three ways with Kiwi & Lime
Long, short and alcohol-free · five minutes each
The range
Made the long way round.
Structured content in tables the studio designs, rendered anywhere with a Canvas loop.
shipped
Open featureGeneral
Blogs
Collections
Navigation
navigation
39 entries40 entries
Columns| Menu | Kind | Section | Label | Description | URL | Order | |
|---|---|---|---|---|---|---|---|
| Company | item | Company | Careers | Join the studio | /careers | 4 | |
| Shop | link | -- | Shop | -- | /shop | 1 | |
| Pricing | link | -- | Pricing | -- | /pricing | 1 | |
| Company | item | Discover | Services | What we do for our clients | /services | 6 | |
| Company | item | Discover | Case Studies | Work we’re proud of | /case-studies | 5 | |
| Company | item | Discover | Articles | News, updates and insights | /articles | 4 | |
| Company | item | Company | Contact | Talk to the team | /contact | 3 | |
| Company | item | Company | Team | Meet the people behind it | /team | 2 | |
| Company | item | Company | Our Story | Who we are and why we build | /our-story | 1 | |
| Resources | featured | -- | Resources | Guides, templates and downloads | /resources | 1 |
Every page of the site in one list: add one, give it a URI and a layout, and it is live.
shipped
Open featureGeneral
Blogs
Collections
Pages
New page N| Name | URI | Status | Published | Last Modified | |
|---|---|---|---|---|---|
| Careers | /careers | Active | 16 Sep 2026 | 16 Sep 2026 | |
| Pricing | /pricing | Active | 2 Sep 2026 | 11 Sep 2026 | |
| Services | /services | Active | 28 Aug 2026 | 9 Sep 2026 | |
| Case studies | /case-studies | Active | 28 Aug 2026 | 4 Sep 2026 | |
| Journal | /journal | Active | 21 Aug 2026 | 2 Sep 2026 | |
| About | /about | Active | 14 Aug 2026 | 28 Aug 2026 | |
| Team | /team | Active | 14 Aug 2026 | 21 Aug 2026 | |
| Contact | /contact | Active | 7 Aug 2026 | 14 Aug 2026 | |
| Our story | /our-story | Active | 7 Aug 2026 | 7 Aug 2026 | |
| Home | / | Active | 31 Jul 2026 | 14 Aug 2026 |
As many blogs as the site needs, each post written, scheduled and published from the admin panel.
shipped
Open featureGeneral
Blogs
Collections
New post
Toroa Clinics came to us with a booking form five steps long. Most people never reached the end of it.
“Nobody books an appointment for fun. Get out of their way.”
So we started again from the one question the clinic actually needs answered first: who are you, and when can you come in? Everything else — the referral, the insurer, the reason for the visit — moved to a single screen after the slot is held.
The rebuilt flow is two steps. Bookings are up by a third, and the front desk spends its mornings on people rather than on the phone.
Publish date & time
16 September 2026 at 09:30
The site's navigation built in the admin panel: order the items, nest them into dropdowns and point each one at a page.
shipped
Open featureGeneral
Blogs
Collections
Main Menu
Menu items
Studio
About us
Careers
Work
Journal
Every page carries its own meta title, description and search settings, edited beside the page itself.
shipped
Open featureGeneral
Blogs
Collections
Edit page
SEO settings
/80 · This will appear in search results.
141/320 · This will appear in search results.
Publish date & time
16 September 2026 at 09:30
Schedule a date & time for this page to become public.
Select a layout for this page.
Select whether this page is publicly visible.
Every image and file for the site in one library, uploaded once and served from the CDN.
shipped
Open featureGeneral
Blogs
Collections
Assets
SPRING
spring-campaign.webp
48 KB
kererū
kereru-logo.svg
3.1 KB
studio-hero.webp
212 KB
team-offsite.jpg
386 KB
KEA
case-kea.webp
22 KB
pattern-grid.png
9.4 KB
favicon.png
1.2 KB
Every published site and every asset is served from Blutui's global CDN: cached at the edge, close to the visitor, so pages and images arrive in milliseconds.
shipped
Open featureAKL50-P1
Auckland · 3 hits · 1 miss
General
Request URLhttps://cdn.blutui.com/uploads/kereru/hero.jpg?width=1440&format=webp
Request MethodGET
Status Code200 OK
Remote Address18.65.72.101:443
Response Headers Raw
age84213
cache-controlpublic, max-age=31536000, immutable
content-length96412
content-typeimage/webp
dateWed, 16 Sep 2026 22:14:07 GMT
varyAccept
via1.1 8f2a1c3e7b5d.cloudfront.net (CloudFront)
x-amz-cf-popAKL50-P1
x-cacheHit from cloudfront
Upload the original once and the CDN resizes and converts it on the fly: one image_url filter in the template, or two parameters on the URL, and a 4 MB photo is a 96 kB webp.
shipped
Open featureArchitecture · Te Whanganui-a-Tara
Architecture for the long light.
Houses, studios and civic rooms shaped by the way the sun crosses them.
<!DOCTYPE html>
▼<html lang="en" class="js">
▶<head>…</head>
▼<body class="antialiased">
▶<header class="site-header">…</header>
▼<main>
▼<section class="hero">
▶<h1 class="hero-title">…</h1>
▶<p class="hero-lede">…</p>
▼<figure class="hero-media">
<img src="https://cdn.blutui.com/uploads/kereru/hero.jpg
"?width=1200&format=webp" alt="Kererū studio at dusk" class="hero-img" width="1200" height="800">== $0
</figure>
</section>
▶<section class="projects">…</section>
</main>
▶<footer class="site-footer">…</footer>
</body>
</html>
Rendered size1200 × 800 px
Intrinsic size4000 × 2667 px
File size3.8 MB
Current sourcehttps://cdn.blutui.com/uploads/kereru/hero.jpg
Rendered size1200 × 800 px
Intrinsic size1200 × 800 px
File size96.4 kB
Current sourcehttps://cdn.blutui.com/uploads/kereru/hero.jpg?width=1200&format=webp
element.style {
}
.hero-img {global.css:214
width: 100%;
height: auto;
display: block;
}
img, video {global.css:38
max-width: 100%;
height: auto;
}
Design a collection schema in the console: add a field, name it, pick its type, and every entry gets it.
shipped
Open featureSchema
+ Add field
General
Blogs
Collections
Navigation
menu
menu_order
kind
label
icon
Add field
Choose a field type to add.
Text
Text
Single line of text for names, titles, or short values
Text Area
Multi-line plain text for descriptions or notes
Rich Text
Formatted text with headings, lists, and styling
Email address with validation
Phone
Phone number input
URL
Web address or link
Number
Number
Numeric value with optional min, max, and step
Choice
Select
Dropdown list to pick one option
Radio
Choose one option from a visible list
Checkbox
Select multiple options from a list
The Project API and SDK: the same collections and forms behind the Canvas site, served as JSON to any front end.
shipped
Open featureCollections · Locations
Location
Ponsonby Clinic
Closes
Saved
Website · Canvas
iOS app · SDK
Front desk · Kiosk
$ curl https://northwind.blutui.com \
/api/collections/team/entries \
-H "Authorization: \
Bearer bt_publishable_…"▏
{
"object": "list",
"data": [
{ "name": "Ada Okafor", "role": "Engineer" },
{ "name": "Sam Reid", "role": "Producer" },
{ "name": "June Park", "role": "Strategist" }
],
"meta": { "total": 4 }
}
Access tokens
(2)(3)
bt_publishable_7Qa9NfLc2VtR8xJm
Never used
bt_publishable_••••••••4c1e
Used 2 min ago
bt_publishable_••••••••9f30
Used 6 hours ago
Project API
Every collection, form, menu and page in this project, as JSON.
Every submission is scanned by AI before it reaches the inbox, so studios only see real enquiries.
exploring
Open featureAssemble a form from a palette of fields and configure each one, with the live form beside you.
shipped
Open featureFields
Name
Phone
Message
Name
Budget*
Message
Budget · Select
Label
Required
Options
General
Blogs
Collections
Project enquiry
name
company
phone
Project events pushed to any endpoint the moment they happen: a form submission lands in Slack, Zapier or a CRM.
shipped
Open featureForms · Contact
Name
Slack · #leads
New enquiry · Riley Morgan
riley@northwind.studio
CRM · Leads
General
Blogs
Collections
Settings
Website detailsMeta & SEOSitemapUsersVerified emailsFormsRedirectsRoute patternsCode injectionWebhooksWebhooks
New webhook| URL | Events | Status | |
|---|---|---|---|
| https://hooks.slack.com/services/T04/B07 | 1 event | Active | |
| https://crm.kereru.studio/sync | 3 events | Active |
New webhook
Create a new webhook endpoint to receive live events from your website.
Retire a path without losing it: every old URL keeps working, sending visitors and search engines to the page that replaced it.
shipped
Open featureGeneral
Blogs
Collections
Settings
Website detailsMeta & SEOSitemapUsersVerified emailsFormsRedirectsRoute patternsCode injectionWebhooksRedirects
New redirect| From | To | |
|---|---|---|
| /about-us | /about | |
| /journal | /articles | |
| /services/branding | /work/branding | |
| /team/hihi | /people/hihi | |
| /competition | / |
New redirect
Send visitors from a path you have retired to the one that replaces it.
One layout serves a whole collection: describe the URL once and every entry gets its own page, no pages to create by hand.
shipped
Open featureGeneral
Blogs
Collections
Settings
Website detailsMeta & SEOSitemapUsersVerified emailsFormsRedirectsRoute patternsCode injectionWebhooksRoute patterns
New pattern| Pattern | Template | |
|---|---|---|
| /journal/:slug | layouts/article.html | |
| /locations/:slug | layouts/location.html | |
| /work/:slug | layouts/case-study.html | |
| /ambassadors/:slug | layouts/ambassador.html | |
| /people/:slug | layouts/person.html |
New route pattern
Create a new route pattern for dynamic routing.
Hint: Use pattern templates below to create a new pattern.
Preview: yoursite.url/stringyoursite.url/string/{slug}
The wordmark as ASCII art for the site footer: "blutui" in binary, streamed through the letters, with a pointer interaction to choose.
exploring
Open featureDrag to pan · ⌘ + scroll or pinch to zoom · 0 fit · 1 actual size